// 单例模式：单例模式是用来控制类型实例的数量的，当需要确保一个类型只有一个实例时，就需要使用单例模式。
//分为懒汉模式和饿汉模式

package main

import "sync"

func main() {

}

//饿汉模式：在程序初始化是就已经确定要加载的实例类型，比如数据库实例之类的
//饿汉模式：在程序执行过程中满足条件加载的实例类型 也叫延迟加载

//饿汉模式，借助init函数

//懒汉模式：借助原子操作或者同步原语 once

type Singleton struct {
}

var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
	//利用同步原语只执行一次
	once.Do(func() {
		instance = &Singleton{}
	})

	return instance
}
